package com.ruoyi.common.mybatisplus.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {

    //定义插入时如何填充
    @Override
    public void insertFill(MetaObject metaObject) {
        //注意这里填充的数据类型要和实体类定义的数据类型保持一致，否则填充不进去或者会报错
        //插入和更新通用，但当字段已存在值时不进行填充
        //判断字段值是否存在,如果当前添加的实体类中 包含 createTime 字段则更新
        if(metaObject.hasSetter("createTime")){
            this.setFieldValByName("createTime", new Date(), metaObject);
            //下面两个方法都表示数据库该字段有值的话不会覆盖原有的值，
            //this.strictInsertFill(metaObject, "createBy", String.class, SecurityUtils.getUsername());
        }
    }

    //定义修改时如果填充
    @Override
    public void updateFill(MetaObject metaObject) {
        // 获得更新对象 updateTime 字段的值
        Object updateTime = getFieldValByName("updateTime", metaObject);
        // 判断 如果对象传入的更新时间 则安装 传入的更新时间更新， 如果没有传入更新时间则传入当前时间
        if(updateTime == null){
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    }
}